// type annotation 类型注解， 我们告诉TS变量是什么类型
// type inference 类型推断，TS 会尝试分析声明的变量类型
// 如果TS能分析出来变量类型，我们不需要在手动进行类型声明
//如果TS无法分析出来时，我们需要手动进行类型声明变量类型

let count: number
count = 123

let countInference = 123

const number1 = 1
const number2 = 2

let total = number1 + number2

function add(first: number, second: number): number {
  return first + second
}

// 类型断言，为了绕开ts的类型检查，可以用类型断言，告诉TS,我知道赋值的这个类型是什么，不用再去检查
//类型断言好比其它语言里的类型转换，但是不进行特殊的数据检查和解构
//类型断言的两种方法
// 1. 尖括号语法
let val: any = [123]
//告诉TS 我知道获取到的val是个string[]类型
let len: string[] = (<Array<string>>val).map((element: string) => {
  console.log(element)
  return element
})
// 2. as 语法
//当你在TypeScript里使用JSX时，只有 as语法断言是被允许的
let someValue: any = "this is a string"
let strLength: number = (someValue as string).length
